/*Description
定义一个椭球（Ellipsoid）类，具体要求如下：
(1) 数据成员包含三个轴的半径r1、r2、r3及圆周率PI=3.1416；
(2) 构造函数：给椭球中的数据成员赋初值。如果不给定任何初始值，则默认椭球三个半径r1=r2=r3=1.0；
(3) 设计成员函数bool IsEqual()判断两个椭球是否完全相同，返回值为布尔类型(true或false)；
(4) 设计成员函数double GetVolume()用于计算椭球的体积（注：椭球的体积公式为4*PI*r1*r2*r3/3）。
*/
#include<iostream>
#include<algorithm>
using namespace std;
class Ellipsoid
{
    double r1=1.0;
    double r2=1.0;
    double r3=1.0;
    double PI=3.1416;
   public:
    Ellipsoid();
    Ellipsoid(double R1,double R2,double R3);
    bool IsEqual(const Ellipsoid& other)const;
    double GetVolume();
   //构造函数的参数de确定？ 
};
//初始化
Ellipsoid::Ellipsoid()
{
    r1=r2=r3=1.0;
}
//检验输入合法性
Ellipsoid::Ellipsoid(double R1,double R2,double R3)
{
    r1=(R1>=0)?R1:1.0;
    r2=(R2>=0)?R2:1.0;
    r3=(R3>=0)?R3:1.0;
}
/*比较两个椭球是否完全一样
Ellipsoid& 是一个引用类型的参数，&表示引用，使用引用传递参数，可以避免拷贝构造函数的调用，提高程序的效率。
Ellipsoid 类对象的引用，意味着函数可以直接访问传入对象的成员变量
other：是参数的名称，代表传入的另一个 Ellipsoid 对象，用于和当前对象进行比较
这个 const 关键字放在函数声明的末尾，表明这是一个常量成员函数。常量成员函数不允许修改成员变量的值，只能读取成员变量的值。
*/
bool Ellipsoid::IsEqual(const Ellipsoid& other)const
{
  double arr1[3]={r1,r2,r3};
  double arr2[3]={other.r1,other.r2,other.r3};
  sort(arr1,arr1+3);
  sort(arr2,arr2+3);
  for(int i=0;i<3;i++)
  {
    if(arr1[i]!=arr2[i])
    {
        return false ;
    }
  }
  return true;
}

double Ellipsoid::GetVolume()
   {
       return (4.0 / 3.0) * PI * r1 * r2 * r3;
   }

 

int main()
{
    double r1,r2,r3;
    cin>>r1>>r2>>r3;
    sort(r1,r2,r3);
    Ellipsoid e1(r1,r2,r3);
    cin>>r1>>r2>>r3;
    sort(r1,r2,r3);
    Ellipsoid e2(r1,r2,r3);
    
    cout<<e1.GetVolume()<<" ";
    cout<<e2.GetVolume()<<endl;
    if (e1.IsEqual(e2))
     cout << "true" << endl;
     else
     cout << "false" << endl;
   
     return 0;
    
}